home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / osclo / osclo.c next >
Text File  |  1991-10-18  |  8KB  |  340 lines

  1. /*
  2.  
  3.     EASY OSCILLOSCOPE for GCC 80386 version TOWNS.
  4.  
  5.     プログラムの起動にはTowns-menu上からEXPファイルをクリックしてください。
  6.     プログラムの動作には2メガバイトのメモリが必要です(1メガも大丈夫かも)。
  7.  
  8.     Programed by s.kamio     June 1991
  9.             (Thanks GCC / Thanks TED-ED WINK2)
  10.  
  11.     ※ 出来ることならば、低ウエイトモードでの使用をお勧めします。
  12.     ※ 改造その他は自由に行ってください。
  13.     ※ スピーカーの音量を上げ過ぎると、まれにハウリングすることがあります。
  14.  
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <tbios.h>    /* my header */
  19.  
  20. #define offset_line 2*60
  21.  
  22. int fs=639;
  23. int cs=0;
  24.  
  25. void main (int argc,char *argv[])
  26. begin
  27.     int a,i,j,p1,p2,vol,vmap;
  28.  
  29.     j=0; p1=0; p2=256; vol=0; vmap=0;
  30.     VGA400_init ();
  31.     EGB_zoom (5,5);
  32.     EGB_gprint (150,0,"通常速度で表示");
  33.     if (argc>1)
  34.     {
  35.         EGB_cls ();
  36.         EGC_putc (11);
  37.         EGB_gprint (0,30,"ウエイト落とした");
  38.         EGB_gprint (0,30+20,"方が速い時がある");
  39.         waite (3*100);
  40.         EGB_gprint (150,0,"それなりに高速");
  41.     }
  42.     for (i=0;i<150;i++)
  43.         EGB_roll2 (0,0,400,18,-1,0);
  44.     waite (60);
  45.     EGB_cls ();
  46.     EGB_zoom (1,1);
  47.     if (argc>1)
  48.     {
  49.         EGB_zoom (2,1);
  50.         fs=319;
  51.     }
  52.     SND_init ();
  53.     SND_evolumeinit ();
  54.     SND_evolume (0,127,127);    /* line volume max */
  55.     SND_evolume (1,96,96);        /* cd volume middle */
  56.     SND_mute (0xff);
  57.         /* make new screen mode (640*256 / 256 colors) */
  58.     outb (0x440,0x0d);
  59.     outw (0x442,0x46+offset_line);
  60.     outb (0x440,0x0e);
  61.     outw (0x442,0x46+512+offset_line);
  62.     outb (0x440,0x0f);
  63.     outw (0x442,0x46+offset_line);
  64.     outb (0x440,0x10);
  65.     outw (0x442,0x46+512+offset_line);
  66.  
  67.     for (i=0;i<0x32;i++)
  68.         EGB_palette (1,0,i,0,0);
  69.     for (i=0;i<256;i++)
  70.         EGB_palette (0,i,0x32,i/5,i);
  71.     EGB_palette (0,255,255,255,255);
  72.     while ((SND_pad(1) & 0x10)!=0)
  73.     begin
  74.         i=1024*p2/8;            /* vram address */
  75.         outb (0x440,17);
  76.         outw (0x442,i);
  77.         outb (0x440,21);
  78.         outw (0x442,i);
  79.         if ((SND_pad(0) & 0x10)==0)
  80.         {
  81.             if (fs==639)
  82.             {
  83.                 fs=319;
  84.                 waite (50);
  85.                 EGB_zoom (2,1);
  86.             }
  87.             else
  88.             {
  89.                 fs=639;
  90.                 waite (50);
  91.                 EGB_zoom (1,1);
  92.             }
  93.         }
  94.         if ((SND_pad(0) & 0x20)==0)
  95.         {
  96.             if (cs==0)
  97.             {
  98.                 cs=-1;
  99.                 waite (50);
  100.             }
  101.             else
  102.             {
  103.                 cs=0;
  104.                 waite (50);
  105.             }
  106.         }
  107.         if ((SND_pad(0) & 0x40)==0)
  108.         {
  109.             main2 ();
  110.         }
  111.         EGC_linebf256 (0,p1,fs,p1+255,1);    /* vram clear */
  112.         while ((SND_pad(1) & 0x20)==0) {}    /* phase */
  113.         vol/=100;                    /* level meator */
  114.         if (vmap<vol) vmap+=(vol-vmap)/4;
  115.         vmap+=(vol-vmap)/4;
  116.         if (vmap>255) vmap=255;
  117.         EGC_linebf256 (0,255-vmap+p1,4*16-1,255+p1,vmap/2);
  118.         EGC_linebf256 (fs,255-vmap+p1,fs-4*16+1,255+p1,vmap/2);
  119.  
  120.         outb (0x4e8,0);            /* ad converter init */
  121.         vol=0;
  122.         while ((inpb(0x4e8) & 0x01)==0) {}
  123.         j=inpb(0x4e7);
  124.         if (cs==0)
  125.         {
  126.             for(i=0;i<fs;i++)
  127.             begin
  128.                 while ((inpb(0x4e8) & 0x01)==0) {}
  129.                 a=inpb(0x4e7);
  130.                 EGC_line256 (i,j+p1,i+1,a+p1,255);        
  131.                 j=a; vol+=abs(a-128);
  132.             end
  133.         }
  134.         else
  135.         {
  136.             for(i=0;i<fs;i++)
  137.             begin
  138.                 while ((inpb(0x4e8) & 0x01)==0) {}
  139.                 a=inpb(0x4e7);
  140.                 EGC_line256 (i,a+p1,i,p1+128,249);
  141.                 j=a; vol+=abs(a-128);
  142.             end
  143.         }
  144.         i=p1; p1=p2; p2=i;
  145.     end
  146.     SND_bye ();
  147.     for (i=0;i<640;i++)
  148.         EGC_line256 (i,0,i,511,0);
  149.     for (i=0;i<0x32;i++)
  150.         EGB_palette (1,0,0x32-i-1,0,0);
  151.     EGB_displaypage (0,0);
  152.     VGA400_init ();
  153.     EGB_displaypage (0,0);
  154.     EGB_pensize (12);
  155.     EGB_paintmode (34);
  156.     EGB_color (0,230);
  157.     EGB_color (2,2+4*1+64*2);
  158.     EGB_box (320-220,200-50,320+220,200+50+33);
  159.     EGB_writecolor (255);
  160.     EGB_gprint (320-220+30,200-50+20,"EASY OSCILLOSCOPE VERSION 1.72");
  161.     EGB_gprint (320-50+30,200-50+40,"PROGRAMED BY S.KAMIO 1991");
  162.     EGB_gprint (320-220+40,200-50+70+7,"NORMAL MODE     : run386 osclo");
  163.     EGB_gprint (320-220+40,200-50+90+7,"HIGH SPEED MODE : run386 osclo -h");
  164.     EGB_roll (0,-32);
  165.     EGB_gprint (200,370,"本日はご利用頂きまして誠に有り難うございました。");
  166.     EGB_displaypage (0,1);
  167.     if ((SND_pad(2) & 0x10)!=0) waite (100*3);
  168.     vram_erase ();
  169.     exit (0);
  170. end
  171.  
  172. main2 ()
  173. {
  174.     uint i,j,r;
  175.     uint x,y;
  176.     int a,b;
  177.     int sx[512],sy[512];
  178.     int vx[512],vy[512];
  179.     unsigned short int p[256];
  180.     unsigned short int wep[256*512];
  181.  
  182.     VGA400_init ();
  183.     EGB_pensize (12);
  184.     EGB_paintmode (34);
  185.     EGB_color (0,230);
  186.     EGB_color (2,2+4*1+64*2);
  187.     EGB_box (320-220,200-16-6,320+220,200+16);
  188.     EGB_writecolor (255);
  189.     EGB_gprint (130,190,"気違いモード  TBIOSで何処まで派手にできるか!?");
  190.     EGB_gprint (280,370,"用意の出来るまでしばらくお待ち下さい。");
  191.     EGB_gprint (48,32,"みぃたぁなぁー");
  192.     EGB_gprint (80,60,"作画が速くても、19.2KHz以上はかけないのだ!");
  193.     EGB_gprint (200,230,"なにをやっているか考えてみよう!(簡単なことよ)");
  194.     for (j=0;j<512;j++)
  195.     {
  196.         for (i=0;i<256;i++)
  197.             wep[i+j*256]=(random () & 0x7fff) & (1024*3+32*3+3);
  198.     }
  199.     EGB_init ();
  200.     EGB_screen (0,6);
  201.     EGB_screen (1,6);
  202.     EGB_displaypage (1,3);
  203.     EGB_writepage (1);
  204.     EGB_zoom (2,2);
  205.     EGB_view (256,200);
  206.     EGB_displaystart (32,0);
  207.     EGB_vramstart (0,2);
  208.     EGB_writepage (0);
  209.     EGB_zoom (5,5);
  210.     EGB_view (128,80);
  211.     SPR_init ();
  212.     SPR_display (1,1024);
  213.     EGB_backcolor (0xffff);
  214.     EGB_cls ();
  215.     for (i=0;i<256;i++)
  216.     {
  217.         EGB_writecolor (31*1024+(i % 16)+(i/16)*32);
  218.         EGB_pset (i % 16,i / 16);
  219.     }
  220.     EGB_get (0,0,15,15,&p[0]);
  221.     SPR_set (1,1020,1,1,&p[0]);
  222.     for (i=0;i<256;i++)
  223.     {
  224.         EGB_writecolor ((i % 16)+(i/16)*32);
  225.         EGB_pset (i % 16,i / 16);
  226.     }
  227.     EGB_get (0,0,15,15,&p[0]);
  228.     for (i=128;i<1020;i+=4)
  229.     {
  230.         EGB_pset (random () % 256,random () % 512);
  231.         SPR_set (1,i,1,1,&p[0]);
  232.     }
  233.     for (i=0;i<1024;i++)
  234.     {
  235.         SPR_setposition (0,i,1,1,(i % 16)*16,(i/16)*16);
  236.         SPR_attribute (i,1,1,128+(rand () % 223)*4,0);
  237.     }
  238.     for (i=768;i<1025;i++)
  239.         SPR_attribute (i,1,1,1020,0);
  240.     SPR_display (1,420);
  241.     for (i=0;i<512;i++)
  242.     {
  243.         vx[i]=0;
  244.         while (vx[i]==0)
  245.         {
  246.             vx[i]=(random () % 14)-7;
  247.         }
  248.         vy[i]=0;
  249.         while (vy[i]==0)
  250.         {
  251.             vy[i]=(random () % 14)-7;
  252.         }
  253.         sx[i]=(random () % 256);
  254.         sy[i]=(random () % 200);
  255.     }
  256.     EGB_put (0,0,255,511,&wep[0]);
  257.     EGB_displaypage (1,3);
  258.     r=rand () % 512;
  259.     p[0]=p[255]=0xffff;
  260.     EGB_writepage (1);
  261.     /* ************************************************** */
  262.     while (((SND_pad(0) & 0x80)!=0) && ((SND_pad(1) & 0x10)!=0))
  263.     {
  264.     /*    SPR_display (2,420);    */
  265.         outb (0x4e8,0);            /* ad converter init */
  266.         for (i=0;i<256;i++)
  267.         {
  268.             while ((inpb(0x4e8) & 0x01)==0) {}
  269.             j=inpb(0x4e7);
  270.             SPR_setposition (0,1023-i,1,1,i-8,j-28-8);
  271.         }
  272.         for (i=256;i<420;i++)
  273.         {
  274.             sx[i]=sx[i]+vx[i];
  275.             if (sx[i]<0)
  276.                 sx[i]=255;
  277.             if (sx[i]>255)
  278.                 sx[i]=0;
  279.             sy[i]=sy[i]+vy[i];
  280.             if (sy[i]<0)
  281.                 sy[i]=199;
  282.             if (sy[i]>199)
  283.                 sy[i]=0;
  284.             SPR_setposition (0,1023-i,1,1,sx[i]-8,sy[i]-8);
  285.         }
  286.         while ((SND_pad(1) & 0x20)==0)
  287.         {
  288.             SPR_display (2,420);
  289.             for (i=256;i<420;i++)
  290.             {
  291.                 sx[i]=sx[i]+vx[i];
  292.                 if (sx[i]<0)
  293.                     sx[i]=255;
  294.                 if (sx[i]>255)
  295.                     sx[i]=0;
  296.                 sy[i]=sy[i]+vy[i];
  297.                 if (sy[i]<0)
  298.                     sy[i]=199;
  299.                 if (sy[i]>199)
  300.                     sy[i]=0;
  301.                 SPR_setposition (0,1023-i,1,1,sx[i]-8,sy[i]-8);
  302.             }
  303.         }
  304.         outb (0x440,17);
  305.         outw (0x442,random () & 0x7fff);
  306.         for (i=1;i<256;i++)
  307.             p[i]=(rand () & 0x7fff);
  308.         r=(r+1) % 768;
  309.         EGB_writepage (1);
  310.         EGB_put (r-255,0,r+256-256,0,&p[0]);
  311.         EGB_put (r-255,1,r+256-256,1,&p[0]);
  312.         EGB_put (r-255,256,r+256-256,256,&p[0]);
  313.         EGB_put (r-255,256+1,r+256-256,256+1,&p[0]);
  314.         EGB_writepage (0);
  315.         EGB_writecolor ((random () & 0x7fff) & (1024*7+32*7+7));
  316.         for (i=0;i<16;i++)
  317.             EGB_pset (random () % 256,random () % 512);
  318.     }
  319.     SPR_display (0,1024);
  320.     EGB_writepage (0);
  321.     EGB_cls ();
  322.     EGB_writepage (1);
  323.     EGB_cls ();
  324.     VGA400_init ();
  325.         /* make new screen mode (640*256 / 256 colors) */
  326.     outb (0x440,0x0d);
  327.     outw (0x442,0x46+offset_line);
  328.     outb (0x440,0x0e);
  329.     outw (0x442,0x46+512+offset_line);
  330.     outb (0x440,0x0f);
  331.     outw (0x442,0x46+offset_line);
  332.     outb (0x440,0x10);
  333.     outw (0x442,0x46+512+offset_line);
  334.     for (i=0;i<256;i++)
  335.         EGB_palette (0,i,0x32,i/5,i);
  336.     EGB_palette (0,255,255,255,255);
  337.     cs=0;        /* normal mode */
  338.     fs=639;
  339. }
  340.